In parallel computers which use message-passing for processor interaction, user code on a source processor specifies a message to be sent, and user code on a destination processor specifies a location for the message to be received into. The operation of specifying where a received message is to be stored is termed "posting a buffer." Unless a buffer is posted, the communication system, which operates as a combination of hardware and software, cannot receive the message since there is no information on where to store the message data.
Because the source and destination processors are assumed to operate asynchronously, the source processor user command to send a message may be executed before the destination processor user command has occurred to post the corresponding buffer. Under normal operation, a message may thus arrive at a destination processor's hardware adapter for the communication system before a buffer has been posted for it.
Previous protocols have handled this problem by having the source processor store the message locally and not send it. When the destination processor user code posts a buffer, the communication system sends a "pull" message to the source processor telling it to send the message to the destination processor, where it can be received. This solution suffers from bad latency performance, however, since every message sent requires two transmission times, i.e., from the destination to the source for the "pull" and from the source to the destination for the message. The protocol can even require three transmission times since the source may send a message header, notifying the destination processor that it can now send a "pull".
Thus, there is a recognized need in the art for an improved message handling protocol to reduce latency between source and receiver nodes in a computer system with a plurality of asynchronous computer nodes interconnected by bidirectional asynchronous communications channels. The present invention addresses this need, and in particular, presents a protocol for handling early arrival messages, i.e., messages that arrive at a receiving node before the receive buffers have been posted for the messages.